home *** CD-ROM | disk | FTP | other *** search
/ 5 Star Games: DOS Edition 2 / 5 Star Games - DOS Edition (1995)(Ready to Run).iso / dbc / db_dmem.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-28  |  1.6 KB  |  72 lines

  1. /****************************************************************************/
  2. /*                         DATABOSS MODULE: DB_DMEM.C                       */
  3. /****************************************************************************/
  4.  
  5. #include "db_lsc.h"
  6.  
  7. #include <dos.h>
  8. #include <stddef.h>
  9. #include "db_types.h"
  10. #include "db_dos.h"
  11. #include "db_dmem.h"
  12.  
  13. /***************************  INTERNAL CONSTANTS  ***************************/
  14.  
  15. #define dosoverhead 1
  16.  
  17. /*****************************  IMPLEMENTATION  *****************************/
  18.  
  19. long dosmavail(void)
  20. {
  21.     union REGS regs;
  22.  
  23.     regs.h.ah = 0x48;
  24.     regs.x.bx = 0xFFFF;
  25.     intdos(®s,®s);
  26.     return ((regs.h.al == 8) ? ((long) regs.x.bx) << 4 : 0);
  27. }
  28.  
  29. ptr dosmalloc(long bytes)
  30. {
  31.     union REGS regs;
  32.  
  33.     regs.h.ah = 0x48;
  34.     regs.x.bx = (word) ((bytes+15) >> 4);
  35.     intdos(®s,®s);
  36.     return ((regs.x.cflag) ? NULL : MK_FP(regs.x.ax,0));
  37. }
  38.  
  39. void dosfree(ptr p)
  40. {
  41.     union REGS regs;
  42.     struct SREGS sregs;
  43.  
  44.     regs.h.ah = 0x49;
  45.     sregs.es = FP_SEG(p);
  46.     intdosx(®s,®s,&sregs);
  47. }
  48.  
  49. ptr dosmallochigh(long bytes)
  50. {
  51.     long segsrequired;
  52.     long segsavail;
  53.     ptr filler,memptr;
  54.  
  55.     segsrequired = ((bytes+15) >> 4);
  56.     segsavail = dosmavail() >> 4;
  57.     if (segsavail < segsrequired)
  58.         memptr = NULL;
  59.     else {
  60.         if ((segsavail - segsrequired) <= dosoverhead)
  61.             memptr = dosmalloc(segsrequired << 4);
  62.         else {
  63.             filler = dosmalloc((segsavail-(segsrequired+dosoverhead)) << 4);
  64.             memptr = dosmalloc(segsrequired << 4);
  65.             dosfree(filler);
  66.         }
  67.     }
  68.     return (memptr);
  69. }
  70.  
  71. /*****************************  END OF DB_DMEM.C  ***************************/
  72.